Caching in the .NET Stack: Inside Out
In this course we look at caching as a tool to improve your solution's performance and capacity. Using a distributed demo solution, we add caching inside the solution using a simple AOP approach, where you'll learn how to use different caches: the .NET MemoryCache, NCache Express, AppFabric Caching, and memcached. We use some custom caches based on Azure Table Storage and disk shares, and you'll see how to set up ASP.NET Output Caching to use different solution caches. You'll learn how to add caching outside the solution with HTTP response headers so consumers of your website and API can cache solution resources locally, and reduce traffic to your servers. Finally, you'll learn how to analyze items to configure them for maximum cache effectiveness, how to control items in caches, and how to measure the performance improvements you get from caching.
Introduction to Caching in the .NET Stack | ![]() | 00:03:37 | |
| Benefits of Caching | ![]() | 01:00 | |
| Aims of the Course | ![]() | 00:34 | |
| Cost and Complexity in Caching | ![]() | 00:59 | |
| Structure of the Course | ![]() | 01:04 | |
Caching Inside the Solution | ![]() | 00:38:26 | |
| Module Introduction | ![]() | 01:05 | |
| A Tour of The Demo Solution | ![]() | 03:23 | |
| Caching and Scalability | ![]() | 02:07 | |
| Manually Caching Inside The Solution | ![]() | 03:46 | |
| Brief Introduction to Aspect Oriented Programming | ![]() | 02:12 | |
| Caching with AOP | ![]() | 03:11 | |
| Recap of Caching With AOP | ![]() | 00:52 | |
| A Deep Dive of The CacheCallHandler | ![]() | 04:14 | |
| Recap of The CacheCallHandler | ![]() | 02:03 | |
| Alternative Usage of AOP | ![]() | 05:14 | |
| A Decision Matrix for Cache Items | ![]() | 02:38 | |
| Applying The Matrix to Items in The Demo Solution | ![]() | 05:20 | |
| Module Summary | ![]() | 02:21 | |
Solution Cache: Local Stores | ![]() | 00:35:46 | |
| Introduction to Local Cache Stores | ![]() | 03:31 | |
| Abstracting The Store With ICache | ![]() | 03:00 | |
| .NET MemoryCache: Usage Demo | ![]() | 05:54 | |
| .NET MemoryCache: Analysis | ![]() | 04:36 | |
| NCache Express: Usage Demo | ![]() | 04:44 | |
| NCache Express: Analysis | ![]() | 02:41 | |
| AppFabric Caching: Usage Demo | ![]() | 05:59 | |
| AppFabric Caching: Analysis | ![]() | 02:49 | |
| The NullCache and Module Summary | ![]() | 02:32 | |
Solution Cache: Remote Stores | ![]() | 00:31:36 | |
| Introduction to Remote Cache Stores | ![]() | 04:24 | |
| Memcached: Usage Demo | ![]() | 04:07 | |
| Memcached: Analysis | ![]() | 02:43 | |
| Azure Table Storage: Usage Demo | ![]() | 04:18 | |
| Azure Table Storage: Analysis | ![]() | 04:11 | |
| Disk Cache: Usage Demo | ![]() | 04:01 | |
| Disk Cache: Analysis | ![]() | 02:46 | |
| Applying The Decision Matrix | ![]() | 05:06 | |
Controlling Items in the Solution Cache | ![]() | 00:27:50 | |
| Introduction and Adding Items to Cache | ![]() | 02:15 | |
| Adding Items: Demo | ![]() | 02:19 | |
| Removing Cache Items Manually | ![]() | 05:02 | |
| Removing Cache Items Automatically | ![]() | 03:49 | |
| Cache Expiration: Demo | ![]() | 02:32 | |
| Cache Expiration: Analysis | ![]() | 01:43 | |
| Disabling The Cache: Demo | ![]() | 01:46 | |
| Disabling The Cache: Analysis | ![]() | 02:08 | |
| Preloading The Cache: Demo | ![]() | 03:00 | |
| Preloading The Cache: Analysis | ![]() | 03:16 | |
ASP.NET Output Caching | ![]() | 00:24:31 | |
| Introduction to ASP.NET Output Caching | ![]() | 03:41 | |
| ASP.NET Output Caching: Demo | ![]() | 06:07 | |
| Output Caching With A Solution Cache | ![]() | 02:29 | |
| OutputCacheProvider With Solution Cache: Demo | ![]() | 06:53 | |
| Choosing A Solution Cache for Output Caching | ![]() | 05:21 | |
Caching Outside the Solution | ![]() | 00:32:38 | |
| Caching Outside The Solution | ![]() | 04:12 | |
| Caching in HTTP Transactions | ![]() | 04:12 | |
| HTTP Validation Caching | ![]() | 02:17 | |
| Validation Caching: Web Demo | ![]() | 04:44 | |
| Validation Caching: Services Demo | ![]() | 05:22 | |
| HTTP Expiration Caching | ![]() | 04:18 | |
| Expiration Caching: Demo | ![]() | 04:33 | |
| Combining Expiration and Validation Caching | ![]() | 03:00 | |
Considerations for Client Caches | ![]() | 00:36:06 | |
| Considerations for Client Caches | ![]() | 05:12 | |
| The Vary Response Header: Demo | ![]() | 03:24 | |
| Consuming API Calls with jQuery and AJAX | ![]() | 04:43 | |
| jQuery and AJAX: Demo | ![]() | 03:43 | |
| Cross-Domain Requests | ![]() | 03:25 | |
| JSONP: Demo | ![]() | 05:22 | |
| Cross-Origin Resource Sharing | ![]() | 02:46 | |
| CORS: Demo | ![]() | 03:44 | |
| Summary | ![]() | 03:47 | |
Controlling items in Client Caches | ![]() | 00:26:16 | |
| Public and Private Client Caches | ![]() | 02:54 | |
| Decision Matrix Applied to Client Caches | ![]() | 02:57 | |
| Demo: Using Squid as A Caching Proxy | ![]() | 03:38 | |
| Analysis: Caching Proxies | ![]() | 02:41 | |
| The Cache-Control HTTP Header | ![]() | 02:57 | |
| Demo: Using Cache-Control | ![]() | 05:53 | |
| Cache-Busting Techniques | ![]() | 05:16 | |
Measuring Performance Improvements | ![]() | 00:23:50 | |
| Measuring to Enable Inspect and Adapt | ![]() | 03:10 | |
| Verifying the Cache Works with Unit Tests | ![]() | 04:05 | |
| Verifying Features Work with Integration Tests | ![]() | 03:16 | |
| Measuring Speed and Capacity with Performance Tests | ![]() | 02:54 | |
| Performance Improvements in the Demo Solution | ![]() | 04:07 | |
| Instrumenting Caches with Performance Counters | ![]() | 03:12 | |
| Checking Runtime Performance with Perfmon | ![]() | 03:06 | |
Course Summary | ![]() | 00:05:10 | |
| Caching Guidelines | ![]() | 02:54 | |
| Course Summary | ![]() | 02:16 |
Introduction to Caching in the .NET Stack



Caching Inside the Solution










Solution Cache: Local Stores







Solution Cache: Remote Stores






Controlling Items in the Solution Cache















Caching Outside the Solution
















Controlling items in Client Caches





Measuring Performance Improvements





Course Summary
